Asterisk
Inštalácia Ze source Ze source sa to dá kompilovat tiéž, já ale na to serem, lebo tie veci sú tak modulárne, že sa s tým jebať netreba. Ak to už čovek ale kompilovat chce, tak aspoň cez nejaký už existujúci source port. Gentoo, alebo pkgsrc, ne? Binary balíky CentOS/RHEL Já uznávam len RPM repositorá, tié sa dajú neoficiálne nájt, keď čovek dost tvrdo kuká, hlavne ten rumun má tuším volačo pre CentOS. OpenWRT opkg update A potom podla toho, čo máme, najlepšié najnovší Asterisk, ale to závisí aj od toho, aký máme hardware, pre novšie Asterisk 13 opkg install asterisk13 ale staršie routre, hlavne tié čo nemajú až tak veľa RAM opkg install asterisk18 Tam mýli vyššie číslo, ale v skutočnosti tým je myslený Asterisk 1.8 Konfigurácia Já to robím najprv teraz tak, že si skopírujem /etc/asterisk do /etc/asterisk_config cp -r /etc/asterisk /etc/asterisk_config A potom je tiež dobrý nápad upraviť práva chown -R asterisk:asterisk /etc/asterisk_config Ak má group asterisk permissions na write do tých konfiguračiék, tak potom si móže čovek usera jebnút do asterisk skupiny a tým pádom sa móže prámo skrz neho menit konfigurácia usermod -a -G asterisk janopalo2 Toď som použil ako príklad užívatela janopalo2, to je samozrejme iba exampleuser. Init script Tu je problém, že keď idem používať vlastnú konfiguráciu, tak mosím ten init script podla toho nastavit, aby bral -C /etc/asterisk_config/asterisk.conf V /etc/asterisk_conf/asterisk.conf mosí ale byt aj etcfolder byť jebnutý na /etc/asterisk_conf/, aby bral ostatné konfiguračky tiež odtál. Keďže máme user a v skupine (okrem iných skupín samozrejme) asterisk, tak móžeme aj zariadiť to, že sa tento user bude mócť do asterisk konzoly dostať skrz asterisk -C /etc/asterisk_config/asterisk.conf , áno, to mosi byt aj na "klientovi" nastavené, čiže na to by bol dobrý alias: alias asterisk="asterisk -C /etc/asterisk_config/asterisk.conf -r" Na to, aby to šecko fungovalo, mosí byť v /etc/asterisk_config/asterisk.conf nakonfigurované files mode=660 user=asterisk group=asterisk Alebo tak nejak... SIP Úvod Keď sa do teho asterisku už dostaneme a vyhádzali sme nepotrebné moduly v modules.conf, ale aj bez toho, móžeme sa posunút smerom riéšeniá SIP userov. Tam si treba položit otázku, že teda do sa prihlasuje k nám a kemu sa prihlasujeme my. Vychádzam teraz z default konfigurácie, de šecko ide cez UDP. Samozrejme, dá sa spravit aj cez TLS, ak má čovek vygenerované SSL certifikát a key. Provider Nášmu providerovi sa prihlásime, aby vedel, že de nás nájde skrz: register => udp://nasuser:naseheslo@voipprovider.kapitalista:5060/nastelefon Teraz ten hajzel kapitalistický vié, že de nás nájde, ak nám niekdo sce zavolat. Ale ešte to nevié asterisk, to sa konfiguruje v peeroch: voipprovider context=venku type=peer host=voipprovider.kapitalista port=5060 remotesecret=naseheslo defaultuser=nasuser fromuser=nasuser Telefón Naše telefóny sa ale prihlasujú k nám, spoločne s týpkami, kerý sa k nám prihlasujú, na to treba vygenerovať tiež peerof, ale teraz ako firendof: ciscotelefon context=doma type=friend host=dynamic secret=nejakeheslo Keďže sa registruje k nám, tak mosí byť host=dynamic, aj keď viéme, akú IP adresu má. To nevadí, môžeme to riešiť ACLkami a nehat povoliť jeho ako telefón prihlásiť len z jednej IP. Tým spôsobom, aj keď by niekdó došól na to, aké je heslo, bolo by mu nahovno, lebo by nebol v správnej sieti. contactdeny=0.0.0.0/0 contactpermit=192.168.0.0/16 alebo contactacl=mojetelfony Context Context je dóležitá súčast security (ak nie jediná security časť) Asterisku, kerá nám dáva možnosť limitovať peerov na určité extensie/telefónne čísla. Tak zabezpečíme napríklad, že hajzel kapitalistický "venku" móže dosiahnuť naše telefóny, lebo mu to explicitne povolíme, aby sa k nám bolo možné dovolať, ale niekdo z jeho IP adresy, lebo ón sa k nám neregistruje, nemóže volať na náš účet, lebo to dokážu len telefóny, keré su v kontexte "doma". RTP a Firewall V rtp.conf nájdeme, že aké proty otvára, keď ideme kecať, čiže tié by mali byť vo firewalli otvorené: iptables -A INPUT -p udp --dport $rtpstart:$rtpend -j ACCEPT alebo tak nejak... Samozrejme, aj náš SIP port by mal byť otvorený, aspoň pre tých, s kerýma sceme kecať iptables -A TCOM -p udp --dport 5060 -j ACCEPT Tu vychádzam z toho, že chain TCOM je vytvorený, ako napríklad skrz: iptables -N TCOM a do neho idú telefonistické IP adresy iptables -A INPUT -s $telekomv4/15 -j TCOM alebo tak nejak... Dialplán Tu sa stretávame zas s našima kontextámi a to vyzerá asi tak, že dialplán mosí byť pridelený contextu, resp naopak, každý context má vlastný dialplán. Čiže v našej príkladovej konfigurácii potrebujeme aspoň dva dialplány, pre každý náš context doma a venku. Lepšie je ale mat ich viác, aby sa dali volania ešte granulárnejšié kontrolovať, napr by mohli byť ďalšie kontexty * deckaa * ukecanaa_dcera * babka_klebetnicka * zena_radodajka * jehovovi_svedkovia a podobne No a tod naše príkladové dialplány doma exten => _421XXXXXXXXXXXX.,1,Dial(SIP/voipprovider/${EXTEN}) exten => 35435,1,Dial(SIP/ciscotelefon) exten => 35000,1,Dial(SIP/dcera&SIP/zena&SIP/babka) # SOS venku exten => nasetelefonnecislo,1,Dial(SIP/ciscotelefon) exten => dcerinecislo,1,Answer() same => n,Play("DoNotTalkToMyDaughterEverAgain.mp3") same => n,Hangup() A tak dalej... Pre srandu tu este jebnem ten dialplán jehovovych svedkov, podla známeho vtipu: jehovovi_svedkovia exten => nasetelefonnecislo,1,Answer() same => n,Play("CoChcete.mp3") same => n,Play("Silence2seconds.mp3") same => n,Play("KolkiSte.mp3") same => n,Play("Silence2seconds.mp3") same => n,Play("TakSaRozpravajte.mp3") same => n,Hangup() Samozrejme by na to bolo treba aj v kontexte "venku" nejaki GoTo, kerý by matchol telefonne cislo na jehovovi_svedkovia_blackiste. Ale to je out of scope tod.